/**
 * NC313 两个数组的交集
 *
 * 给定两个整数数组分别为 nums1, nums2，找到它们的公共元素并按返回。
 * 数据范围：
 * 1≤nums1.length,nums2.length≤1000
 * 1≤nums1[i],nums2[i]≤1000
 */

import java.util.ArrayList;

/**
 * 这里使用 hash 记录 出现在 nums1 中的结果
 * 在查找 nums2 中重复的, 这里有一个细节, 就是
 * 相同的数字我们只要一个就可以了, 所以出现了一遍,
 * 我们将数组中的重置为 false
 * 时间复杂度 : O(n)
 * 空间复杂度 : O(1)
 */


public class Main {
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     *
     * @param nums1 int整型ArrayList
     * @param nums2 int整型ArrayList
     * @return int整型ArrayList
     */
    public ArrayList<Integer> intersection (ArrayList<Integer> nums1, ArrayList<Integer> nums2) {
        // write code here

        ArrayList<Integer> res = new ArrayList<>();
        boolean[] hash = new boolean[1010];
        for (int num : nums1) {
            hash[num] = true;
        }

        for (int num : nums2) {

            if (hash[num]) {
                // 重置并添加
                hash[num] = false;
                res.add(num);
            }
        }

        return res;
    }
}